// https://leetcode.cn/problems/sum-of-left-leaves/description/
package binarytree

func sumOfLeftLeaves(root *TreeNode) int {
	if root == nil {
		return 0
	}

	sum := 0
	if root.Left != nil && root.Left.Left == nil && root.Left.Right == nil {
		// 如果左子节点是叶子节点，累加它的值
		sum += root.Left.Val
	}

	// 递归计算左子树和右子树的左叶子节点之和
	sum += sumOfLeftLeaves(root.Left) + sumOfLeftLeaves(root.Right)

	return sum
}

// 思路：
// 1. 如果当前节点为空，返回0。
// 2. 如果左子节点是叶子节点，将其值加到总和中。
// 3. 递归计算左子树和右子树的左叶子节点之和。
// 4. 返回总和。
// 时间复杂度是O(n)，其中n是树中的节点数，因为每个节点都被访问一次。
// 空间复杂度是O(h)，其中h是树的高度，递归调用栈的深度取决于树的高度。
